package com.my.mymafengwo.utils;

import com.amap.api.maps2d.AMapUtils;
import com.amap.api.maps2d.model.LatLng;

/**
 * ***********************************************
 * author:wgh
 * time:2015/12/5 11:24
 * copyright:
 * name: 计算一些数据的工具类
 * step:
 * ***********************************************
 */
public class MathUtils {
    //地球半径
    private static double R = 6378.137;

    public static double rad(double d) {
        return d * Math.PI / 180.0;
    }

    /**
     * 计算地球上两点(经纬度)的距离
     *
     * @param lat1 第一点纬度
     * @param lng1 第一点经度
     * @param lat2 第二点纬度
     * @param lng2 第二点经度
     * @return 返回距离 单位:km
     */
    public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
        double a = rad(lat1) - rad(lat2);
        double b = rad(lng1) - rad(lng2);

        double sa = Math.sin(a / 2);
        double sb = Math.sin(b / 2);
        double distance = 2 * R * Math.asin(Math.sqrt(sa * sa) + Math.cos(lat1) * Math.cos(lat2) * sb * sb);
        return distance;
    }

    public static double getDistance(String lat1, String lng1, String lat2, String lng2) {
        return getDistance(Double.parseDouble(lat1), Double.parseDouble(lng1), Double.parseDouble(lat2), Double.parseDouble(lng2));
    }

    /**
     * 保留小数点后一位的数
     *
     * @param d
     * @return
     */
    public static double getOneDouble(double d) {
        if (d != 0) {
//            BigDecimal bd = new BigDecimal(d);
//            return bd.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();//BigDecimal.ROUND_HALF_UP 是4舍5入，BigDecimal.ROUND_DOWN是舍去，BigDecimal.ROUND_FLOOR是向上取整
            return ((long) d * 10) / 10.0;
        }
        return 0;
    }

    public static int getAMapDistance(LatLng start, LatLng end) {
        return (int) AMapUtils.calculateLineDistance(start, end);
    }
}
